图层控制管理

最后更新时间:2020年12月8日

地图是由多个图层按照上下顺序叠加到一起组成的,每个图层都展示一部分的地理信息。例如,用户看到的居民区、绿地区域、水域、道路、兴趣点等等,都可以由单独的图层来展现。图层控制管理包括对地图中图层进行可见性、状态的控制,以及图层的叠加、移动、移除等操作管理。

主要通过API程序包com.zondy.mapgis.map的MapLayer类接口实现。

1 图层可见性控制 Sample详情

在实际应用中,我们经常需要隐藏某些叠加在上层的图层,从而来观察下面图层的情况,这时候就需要利用到图层的显示控制,这是一个非常常用且容易实现的功能。图层显示控制功能的核心代码如下所示:

Map map=mapView.getMap();
MapLayer mapLayer=map.getLayer(0);
//获取图层可见性
if (mapLayer.getIsVisible()){
    mapLayer.setVisible(false);       //设置图层隐藏
}
else mapLayer.setVisible(true);       //设置图层可见

也可利用setState(LayerState State)方法来设置图层状态来控制是否可编辑、是否可见。

2 图层管理 Sample详情

在地图显示之后,可以根据需要对地图中的图层进行管理。例如在已有地图中叠加新的图层、移动图层、移除图层。

(1) 图层叠加

在移动端加载地图数据,与桌面端类似,当前地图容器(MapView)中只能加载一个地图文档(mapx),并且只能激活打开一个地图(map)。但在实际应用中,可能需要将不同来源的地图数据同时显示,那么就需要使用到地图叠加的功能,本地矢量数据、本地瓦片数据、在线服务地图数据都可以作为图层(Layer)进行叠加。

重要说明:要确保叠加的图层和原有地图的空间参考系一致,这样叠加的效果才能显示正确。

//初始加载离线矢量地图作为底图(Web墨卡托投影坐标系)
mapView.loadFromFile(android.os.Environment.getExternalStorageDirectory().getPath() + "/MapGISSample/Map/MapShow/WuHan/WuHan.mapx");

//叠加地图
//创建地图服务对象(类型为谷歌影像,同为Web墨卡托投影坐标系)
MapServer mapServer = ServerLayer.createMapServer(MapServer.MAPSERVER_TYPE_GOOGLE_SATELLITEMAP);
ImageLayer serverLayer = new ImageLayer();    //创建服务图层对象
serverLayer.setMapServer(mapServer);          //设置地图服务即数据源
serverLayer.setName("Google服务图层");         //设置图层名称
mapView.getMap().append(serverLayer);         //添加图层,叠加地图到顶层
mapView.forceRefresh();                       //需要强制刷新地图

实现图层叠加的效果可采用多种方法实现:

接口 功能
append(MapLayer layer) 添加图层
insert(int index, MapLayer layer) 插入图层
dragIn(int index, MapLayer layer) 拽入图层

其中append方法是将图层叠加到地图顶层,显示在最上层;insert和dragIn方法可以将图层插入到地图中的任何位置。

(2) 图层移动

利用图层移动接口方法可以调整图层的压覆顺序,达到图层叠加展示效果的调整。

说明:根据地图组织的规则,图层索引从0开始,索引值越小,越先绘制,显示在越底层;索引值越大,越后绘制,显示在越上层。

mapView.getMap().move(1,2);   //将图层从图层索引1移至图层索引2

除此方法外,API程序包com.zondy.mapgis.map的MapLayer类还提供了其他的接口实现图层移动功能。

接口 功能
move(int fromIndex, int toIndex) 将图层从索引值fromIndex移至toIndex
moveToBottom(int index) 移动图层到最下面(最后绘制)
moveToDown(int index) 下移图层
moveToTop(int index) 移动图层到最上面(最先绘制)
moveToUp(int index) 上移图层

(3)图层移除

利用图层移除接口可以将图层从地图中移除。

mapView.getMap().remove(1);   //根据索引移除图层

达到图层移除的效果可采用多种方法实现:

接口 功能
remove(int index) 移除索引为index的图层
remove(int fromIndex, int count) 从FromIndex开始移除Count个图层
remove(MapLayer layer) 移除图层
removeAll() 移除所有图层,同时销毁图层
dragOut(MapLayer layer) 移除图层,不会销毁图层

说明:移除图层,不会将真正的图层数据删除,只是在当前显示的地图中移除此图层,也可再叠加上。利用remove系列方法移除图层时,会将其MapLayer对象销毁,如果移除后又需要叠加到map中,则MapLayer需要重新构建。dragOut方法移除时不会销毁图层。